#include "GerenciadorCamera.h"

GerenciadorCamera::GerenciadorCamera(ISceneManager *cena, vector3df posicao, vector3df lookAt): 
				   velocidadeMovimentacao(0.3f), velocidadeRotacao(0.3f){

	camera = cena->addCameraSceneNode(0,posicao,lookAt);
}

GerenciadorCamera::GerenciadorCamera(ISceneManager *cena, vector3df posicao, vector3df lookAt, float velocidadeMovimentacaoCamera, float velocidadeRotacaoCamera):
				   velocidadeMovimentacao(velocidadeMovimentacaoCamera), velocidadeRotacao(velocidadeRotacaoCamera){

	camera = cena->addCameraSceneNode(0,posicao,lookAt); 
}


GerenciadorCamera::~GerenciadorCamera(void){
	
	delete camera;
}
void GerenciadorCamera::movimentar(direcaoCamera direcao){
	vector3df difLookAt;
	difLookAt = (camera->getPosition() - camera->getTarget());

	if(direcao == DIREITA)
		camera->setPosition(vector3df((camera->getPosition().X + velocidadeMovimentacao),camera->getPosition().Y, camera->getPosition().Z));
	
	if(direcao == ESQUERDA)
		camera->setPosition(vector3df((camera->getPosition().X - velocidadeMovimentacao),camera->getPosition().Y, camera->getPosition().Z));

	if(direcao == CIMA)
		camera->setPosition(vector3df(camera->getPosition().X ,camera->getPosition().Y, (camera->getPosition().Z + velocidadeMovimentacao)));

	if(direcao == BAIXO)
		camera->setPosition(vector3df(camera->getPosition().X ,camera->getPosition().Y, (camera->getPosition().Z - velocidadeMovimentacao)));
	
	setLookAtCamera((camera->getPosition().X - difLookAt.X),
					(camera->getPosition().Y - difLookAt.Y),
					(camera->getPosition().Z - difLookAt.Z));
		
		
}

float GerenciadorCamera::getPosicaoX(void){
	
	return camera->getPosition().X;
}

float GerenciadorCamera::getPosicaoY(void){
	
	return camera->getPosition().Y;
}

float GerenciadorCamera::getPosicaoZ(void){
	
	return camera->getPosition().Z;
}

float* GerenciadorCamera::getPosicaoXYZ(void){
	float *vetor = new float[3];
	vetor[0] = camera->getPosition().X;
	vetor[1] = camera->getPosition().Y;
	vetor[2] = camera->getPosition().Z;

	return  vetor;

	//return (new float[] = {new float(1),new float(2),new float(4) });
}

void GerenciadorCamera::setLookAtCamera(float x, float y, float z){

	camera->setTarget(vector3df(x,y,z));
}

void GerenciadorCamera::rotacionar(){
	camera->getRotation();

	camera->setRotation(vector3df(-2450.f, -9100.f, 34.f));

	camera->getRotation();


	
}